﻿\subsection{文件路径管理}

SimpleOS 文件路径采用反斜线 \lstinline{\} 分隔，同时也接受采用正斜线 \lstinline{/} 分隔的方式，在处理路径字符串时，字符串中的正斜线全部被替换为反斜线，相邻的分隔符被替换为单个。
打开文件本质上是解析路径字符串，在相应目录文件中找到待打开的文件的目录项，目录项中记录了文件的起始簇，该起始簇号可在磁盘中定位到文件首个簇的存放位置，进而获取到改文件的内容。
可见，对路径字符串正确、高效的处理是任何文件操作的基石。

前面小节已经提到，操作系统内核中维护一个 FCB 队列，该队列实际上是文件路径解析过程中产生的缓存信息。
例如，假定初始 FCB 队列仅含有头结点（对应于根目录 \lstinline{\}），用户尝试打开 \lstinline{\foo\bar\baz.txt}（假定存在），文件打开后，FCB 队列将发生如图变化。

\begin{figure}[h!]
    \Centering
    \caption{解析文件路径（一）}
    \label{RESOLVE_PATH_0}
    \includegraphics{build/Paper/Assets/ResolvePath_00.pdf}
\end{figure}

随后，若用户尝试打开文件 \lstinline{\foo\bar\lorem.txt}（假定存在），文件系统将采用贪心匹配策略进行最长前缀匹配，直接定位到 \lstinline{\foo\bar\} 目录的 FCB，
在目录文件中检索目录项 \lstinline{lorem.txt}，随后 \lstinline{\foo\bar\lorem.txt} 被缓存到 FCB 队列中。

\begin{figure}[h!]
    \Centering
    \caption{解析文件路径（二）}
    \label{RESOLVE_PATH_0}
    \includegraphics{build/Paper/Assets/ResolvePath_01.pdf}
\end{figure}

在进行路径匹配时，任何文件路径都能够与根目录匹配，在后续遍历 FCB 队列的过程中，若还能找到更长的匹配序列，则上一次的匹配结果将被覆盖。

